package com.tgy.blog.config;


import com.tgy.blog.interceptors.ArticleReadInterceptor;
import com.tgy.blog.interceptors.CommentFileInterceptor;
import com.tgy.blog.interceptors.VisitsInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 拦截器配置
 * 可以注入多个bean，然后根据不同的路劲对于需要的验证进行添加
 */
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Bean
    public ArticleReadInterceptor articleReadInterceptor() {
        return new ArticleReadInterceptor();
    }
    @Bean
    public VisitsInterceptor visitsInterceptor() {
        return new VisitsInterceptor();
    }
    @Bean
    public CommentFileInterceptor commentFileInterceptor() {
        return new CommentFileInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        //针对以下配置的路劲进行 ArticleReadInterceptor 这个类中的方法进行 拦截验证
        registry.addInterceptor(articleReadInterceptor())
                .addPathPatterns("/blog/article/addArticleWatch");

        //针对以下配置的路劲进行 visitsInterceptor 这个类中的方法进行 拦截验证
        registry.addInterceptor(visitsInterceptor())
                .addPathPatterns("/blog/article/**")
                .addPathPatterns("/html/**")
                .addPathPatterns("/blog/user/**")
                // 排除评论接口（评论和文件接口单独验证）
                .excludePathPatterns("/blog/article/addComment")
                .excludePathPatterns("/blog/user/register");
                // .excludePathPatterns("/blog/article/getComment");

        //针对以下配置的路劲进行 commentFileInterceptor 这个类中的方法进行 拦截验证
        registry.addInterceptor(commentFileInterceptor())
                .addPathPatterns("/file/downloadFile")
                .addPathPatterns("/file/uploadFile")
                .addPathPatterns("/blog/article/addComment")
                .addPathPatterns("/blog/user/register");
                // .addPathPatterns("/blog/article/getComment");

    }
}
